package com.swu.pad.system.controller;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import java.io.File;  
import java.io.IOException;  
  
import org.apache.commons.io.FileUtils;  
import org.springframework.context.annotation.Scope;  
import org.springframework.http.HttpHeaders;  
import org.springframework.http.HttpStatus;  
import org.springframework.http.MediaType;  
import org.springframework.http.ResponseEntity;  
import org.springframework.stereotype.Component;  
import org.springframework.web.bind.annotation.RequestMapping;  


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.swu.pad.activity.dao.ActivityDao;
import com.swu.pad.activity.entity.Activity;
import com.swu.pad.assignment.dao.AssignmentDao;
import com.swu.pad.assignment.dao.AssignmentPadDao;
import com.swu.pad.assignment.entity.Assignment;
import com.swu.pad.assignment.service.AssignmentPadService;
import com.swu.pad.assignment.service.AssignmentService;
import com.swu.pad.comment.dao.CommentDao;
import com.swu.pad.comment.dao.CommentQuestionDao;
import com.swu.pad.comment.dao.FbCommentDao;
import com.swu.pad.course.dao.CourseGroupUserDao;
import com.swu.pad.course.dao.GroupDao;
import com.swu.pad.course.entity.CourseGroupUser;
import com.swu.pad.course.service.CourseService;
import com.swu.pad.event.entity.RftWritingEvent;
import com.swu.pad.event.service.EventService;
import com.swu.pad.experiment.service.ExperimentService;
import com.swu.pad.system.dao.UserDao;
import com.swu.pad.system.entity.User;
import com.swu.pad.system.entity.Users;
import com.swu.pad.system.service.UserService;
import com.swu.pad.util.DocToSentencesClassUtil;
import com.swu.pad.util.StringUtil;
import com.swu.pad.util.TimeUtil;
import com.swu.pad.util.EPLiteClient.EPLiteClient;

/**
 * Handles requests for the application home page.
 */
@Controller
public class LoginController {

	
	
	@Autowired
	private ActivityDao activityDao;
	@Autowired
	private UserService userService;
	@Autowired
	private AssignmentDao assignmentDao;
	@Autowired
	private AssignmentPadDao assignmentPadDao;
	@Autowired
	private CourseGroupUserDao courseGroupUserDao;
	@Autowired
	private CommentDao commentDao;
	@Autowired
	private CommentQuestionDao commentQuestionDao;
	@Autowired
	private AssignmentService assignmentService;
	@Autowired
	private CourseService courseService;
	@Autowired
	private GroupDao groupDao;
	@Autowired
	private EPLiteClient epliteClient;
	@Autowired
	private FbCommentDao fbCommentDao;
	@Autowired
	private  UserDao userDao;	
	@Autowired
    private ExperimentService experimentService;	
	@Autowired
	private AssignmentPadService assignmentPadService;
	@Autowired
	private EventService eventService;

	@RequestMapping(value = "/login")
	public String login(HttpSession session, HttpServletRequest request) {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		
	   
		
	    if (username != null && password != null) {
			User stu = userService.login(username, password); 
			if (stu != null) {
				System.out.println(stu.getRealname()+"-->>"+username+"-->>login-->>"+TimeUtil.getStringDate());
				//记录 行为 登录
				RftWritingEvent rwEvent=new RftWritingEvent();
		  		rwEvent.setAction("login");
		  		rwEvent.setActivityId("noActivityId");
		  		rwEvent.setObject("login_button");
		  		rwEvent.setUserId(stu.getId());
		  		eventService.saveRftWritingEvent(rwEvent);//暂时这么设计 ，只针对 反思写作研究，后面有需要可以删除该行为记录代码
				//记录结束
				session.setAttribute("user", stu);
				return "redirect:/";
			}
		}
		return "login";
	}

	@RequestMapping(value = "/logout")
	public String logout(HttpSession session, HttpServletRequest request) {
		// 清除session
		@SuppressWarnings("unchecked")
		Enumeration<String> em = request.getSession().getAttributeNames();
		while (em.hasMoreElements()) {
			request.getSession().removeAttribute(em.nextElement().toString());
		}
		request.getSession().removeAttribute("user");
		request.getSession().invalidate();
		return "redirect:/login";
	}
	/**
	 * jiaozanyu
	 * 获取行为图数据 
	 * @param groupName
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "/getVersion")
	public Map getVersion( String groupName,String assignmentId) {
		
     
		JSONObject jsono= assignmentPadService.getVersion(groupName,assignmentId);
		//jsono= assignmentPadService.getVersion(groupName,assignmentId);
//		 jsono= assignmentPadService.getVersion(groupName,assignmentId);
		JSONArray _version=jsono.getJSONArray("version");
		List _user=userService.findUserBygroupName(groupName,assignmentId);
		Iterator it =_user.iterator();
		while(it.hasNext()){
			Users userOne=(Users) it.next();
			String userId=userOne.getId();
			List data=experimentService.getUserVersion(userId,assignmentId);
    		if(data != null){
    			_version.addAll(data);
    		}
			
		}
		Map data=new HashMap();
		data.put("user", _user);
		data.put("version", _version);		
		return data;
	}

	
	@ResponseBody
	@RequestMapping(value = "/getSessionUser")
	public User getSessionUser(HttpSession session) {

		User user = (User) session.getAttribute("user");
		
		return user;
	}
	
	@ResponseBody
	@RequestMapping(value = "/getSessionUserB")
	public Map<String, Object> getSessionUserB(String assignmentPadId,HttpSession session) {

		User user = (User) session.getAttribute("user");
	    String[] ssr=assignmentPadId.split("\\$");
	    String groupId=ssr[0].toString();
	    Map<String, Object> map = new HashMap<String, Object>();
		map=epliteClient.createSession(groupId,user.getId(),24);
		//System.out.println(user.getId());
		String sessionId=map.get("sessionID").toString();
		//System.out.println(sessionId);
		map.put("user",user);
		return map;
	}
	
	/*
	 * @ResponseBody
	 * 仅做压力测试使用
	 * @RequestMapping(value = "/stressTest") public void stressTest() throws
	 * Exception { System.out.println("<<in<<  "+TimeUtil.getStringDate()); String
	 * docText="目前，我在英格兰西南部的一所成人教育学院进行实习教学，学习如何向不同的成年人群体教授中学数学。由于我还处于实习的初级阶段，所以我主要负责协助班级导师授课，并且刚刚开始规划每节课的讲授内容。这件事发生在一节晚上的课上，当时我正准备开始讲授我的第一节课。导师一直在教学生分数，而我的任务是接着导师讲下去，教学生如何将两个分数相乘。然而，当我要上这节课的时候，我走到白板前，变得非常紧张，以至于我挣扎着向大家发言。我明显地感到自己在发抖，甚至不能连贯地说出一句话来。学生们都很理解我，因为他们都是成人学生，知道我是新手，很紧张，但导师无动于衷，他代替我继续讲我剩下的课，而我坐在教室后面，尽量不让自己哭出来。一下课我就离开了课堂，没有和任何人说话。当时我感到非常痛苦，甚至考虑过离开我的教师培训课程。我也因为自己不能在大家面前发言而感到尴尬和难过，但我也对班主任在学生面前的反应感到非常生气。后来我觉得她没有给我足够的时间使我镇定下来，她应该让我舒缓一下自己的紧张。这种情况使我非常苦恼，接下来的一个星期我打电话请了病假。当我回想起那段经历时，我才决定我需要和实习主管谈谈。我后来也意识到，在公众面前讲话时感到紧张是一种自然的反应，这才让我觉得不那么尴尬了。当时，我觉得情况根本没有得到解决。我故意在下课的时候离开，没有和老师或学习者说话。然而，在一名学员给我讲述了他自己的经历后，我开始感到乐观了。我意识到每个人在开始上几节课之前都会感到紧张。正如Greene在相关文献中所指出的: 每10名新实习教师中就有9人发现他们的第一次培训经历令人难以置信地畏惧。看来，大多数实习教师都有口齿不清和不知所措的时刻。我自己和班主任的行为使情况变得更糟。我觉得我应该反抗她，而不是让她控制课堂，我应该在课后立即告诉她我的感受。像Cooper指出的那样，应该立即处理这样的情况。几天后，我和实习指导老师谈了话，直到我、教师和指导老师开了一次正式会议，我才再次见到了班主任。Daynes和Farris说，如果不立即亲自处理问题，而是将问题交给权威人物处理，情况会变得更糟。班主任可能会觉得她被人联合起来对付，这可能会导致未来发生一些问题。导师的行为也使情况变得更糟，因为她没有给我时间来克服我的恐惧，她故意让我在全班面前尴尬。她说她以为她是在帮助我克服焦虑，但我不相信那是真的。然而，由于我们只是在一周后与主管的会议上才谈到此事，她坚定地认为我当时应该跟她当面讲清楚。现在回想起来，我应该用不同的方式去做以下几件事。会议结束后，我应该马上跟班主任谈谈，说出我的观点。我还应该更果断地建议导师我可以继续上课。然而，这件事让我意识到与老师建立关系的重要性，这是Jackson强调的基本技能。我觉得，如果我在前几周和老师建立了专业的关系，我就能解释我之前有多紧张。这将为讨论应对紧张情绪的策略提供机会，或许这一事件本可以完全避免。在未来，我会确保与同事建立良好的关系。在实习期间，我与几位不同的老师一起工作，我打算和他们每个人谈谈我的紧张。我已经和一位老师进行了一次有益的交谈，我们一起制定了未来几周的团队教学计划，这样我就不会感到有太多压力。我打算和其他班的老师一起这样做，因为这有助于他们理解我的感受。我还需要更多地和我的学员们谈谈他们的感受，因为我想我可以从他们身上学到很多东西。在培训方面，我已经在大学预定了一个演讲技巧研讨会，并打算在之后参加一些练习。这次经历让我意识到我需要在演讲时获得更多的自信，我觉得提高我的演讲技巧会帮助我做到这一点。"
	 * ; Map<String,Object>
	 * resMap=DocToSentencesClassUtil.docSentenceClass(docText);
	 * System.out.println(resMap.toString());
	 * System.out.println(">>out>>  "+TimeUtil.getStringDate()); }
	 */

}
